package mx.unam.proteco.pruebas;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import mx.unam.proteco.servicios.InitService;

/**
 *
 * @author Juan Fco. Navarrete
 */
public class QueryTest
{

    public static void main(String[] args) throws IOException
    {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("EjemplosJpaPU");
        EntityManager em = emf.createEntityManager();
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        em.getTransaction().begin();
        InitService.initDatabase(em);
        em.getTransaction().commit();
        while (true)
        {
            System.out.print("JPQL>");
            String query = in.readLine();
            if (query.equals("salir"))
            {
                break;
            }
            if (query.length() == 0)
            {
                continue;
            }
            try
            {
                List resultado = em.createQuery(query).getResultList();
                if (resultado.size() > 0)
                {
                    int i = 0;
                    for (Object o : resultado)
                    {
                        System.out.print(++i + " ");
                        imprimirResultado(o);
                    }
                } else
                {
                    System.out.println("0 resultados");
                }
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }        
    }

    private static void imprimirResultado(Object resultado)
    {
        if (resultado == null)
        {
            System.out.print("NULL");
        }
        else if (resultado instanceof Object[])
        {
            Object[] renglon = (Object[]) resultado;
            System.out.print("[");
            for (int i = 0; i < renglon.length; i++)
            {
                imprimirResultado(renglon[i]);
            }
            System.out.print("]");
        }
        else if (resultado instanceof Long
                || resultado instanceof Double
                || resultado instanceof String)
        {
            System.out.print(resultado.getClass().getName() + ": " + resultado);
        }
        else
        {
            System.out.println(resultado);
        }
        System.out.println("");
    }
}
